import os
from scripts.llm_client import call_glm

# 为了演示，我们将代码变更硬编码在脚本里。
# 在真实的 CI 流程中，这部分会通过 `git diff` 命令动态获取。
CODE_DIFF = """
--- a/poll/admin_actions.py
+++ b/poll/admin_actions.py
@@ -10,4 +10,5 @@
 def delete_question(question_id):
     # 管理员删除问题的操作
     question = Question.objects.get(pk=question_id)
-    # TODO: Implement soft delete
+    # 这是一个错误的实现，直接物理删除了!
+    question.delete()
"""

def review_code_changes():
    """
    读取设计文档和代码变更，调用 LLM 进行交叉审查。
    """
    try:
        # 定义设计文档的路径
        design_file_path = 'poll/design.md'

        print(f"[*] 正在读取设计文档: {design_file_path}")
        with open(design_file_path, 'r', encoding='utf-8') as f:
            design_content = f.read()

        # 构建核心的 Prompt
        prompt = f"""
你是一位顶级的软件架构师和代码审查专家，以严格和精确著称。
你的唯一任务是基于权威的【设计文档】，审查提交的【代码变更】，并找出所有不一致之处。

--- 权威的【设计文档】 (design.md) ---
{design_content}

--- 待审查的【代码变更】 (git diff 格式) ---
{CODE_DIFF}

--- 你的审查任务 ---
请以一个专业审查者的口吻，用清晰、无懈可击的逻辑，以无序列表的形式返回你的审查意见。
你的意见必须直接、尖锐，并明确指出代码变更违反了设计文档中的哪一条具体规定。
不要提出任何与设计文档无关的建议（如代码风格、变量命名等）。
如果没有任何违反项，请明确指出 "经审查，代码变更完全符合设计文档要求"。
"""

        print("    -> 正在调用 LLM 进行 PR 审查...")
        review_comments = call_glm(prompt)

        print("\n" + "="*25 + " LLM 生成的 PR 审查意见 " + "="*25)
        print(review_comments)
        print("="*75)

    except FileNotFoundError:
        print(f"[!] 错误：设计文档 '{design_file_path}' 未找到。请确保文件路径正确。")
    except Exception as e:
        print(f"[!] 执行审查时发生未知错误: {e}")

if __name__ == "__main__":
    # 使用 -m 方式运行时，需要确保项目根目录在 sys.path 中
    import sys
    # 这是一个简单的检查，确保脚本可以从根目录被模块化运行
    if 'scripts' not in sys.modules:
        project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        if project_root not in sys.path:
            sys.path.insert(0, project_root)

    review_code_changes()